#define _CRT_SECURE_NO_WARNINGS 1

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int zero = 0, n = nums.size();
        while (zero < n && nums[zero] != 0) ++zero;
        int non_zero = zero + 1;
        while (non_zero < n)
        {
            while (non_zero < n && nums[non_zero] == 0) ++non_zero;

            if (zero < non_zero && non_zero < n)
                swap(nums[zero], nums[non_zero]);
            zero++;
        }
    }
};